<?php

namespace App\Http\Controllers\FileControllers;

use App\Http\Controllers\Controller;
use App\Models\DataTableModel\File;
use App\Models\DataTableModel\Folder;
use Illuminate\Http\Request;
use Illuminate\Database\Eloquent\ModelNotFoundException;

class FolderFileDeleteControllers extends Controller
{
    // 删除文件或文件夹
    public function deleteFileOrFolder(Request $request)
    {
        try {
            $id = $request->input('id');
            $type = $request->input('type');
            if ($type === 'file') {
                $item = File::findOrFail($id);
            } elseif ($type === 'folder') {
                $item = Folder::findOrFail($id);
            } else {
                return response()->json(['error' => 'Invalid type.'], 400);
            }

            // 假设文件和文件夹都有一个 'file_state' 或 'folder_state' 字段    
            // 并且我们通过将该字段设置为 'off' 来表示删除    
            if ($type === 'file') {
                $item->file_state = 'off';
            } elseif ($type === 'folder') {
                $item->folder_state = 'off';
            }

            $item->save();

            return response()->json(['success' => '项目已成功删除']);
        } catch (ModelNotFoundException $e) {
            // 当使用 findOrFail 方法且未找到模型时，会抛出此异常  
            return response()->json(['error' => '未找到项目'], 404);
        } catch (\Exception $e) {
            // 捕获其他所有异常  
            return response()->json(['error' => '删除项目时出错'], 500);
        }
    }


    // 批量删除方法
    public function bulkDelete(Request $request)
    {
        try {
            $items = $request->input('array'); // 假设传入的数组键名为'items'  

            // 验证items数组是否非空  
            if (empty($items)) {
                return response()->json(['error' => '未选择要删除的项目'], 400);
            }

            // 初始化变量以跟踪实际更新的文件/文件夹数量（如果需要的话）  
            $updatedFileCount = 0;
            $updatedFolderCount = 0;

            foreach ($items as $item) {
                $id = $item['id'];
                $type = $item['type'];

                if ($type === 'file') {
                    $file = File::find($id);
                    if ($file) {
                        $file->file_state = 'off';
                        $file->save();
                        $updatedFileCount++;
                    }
                } elseif ($type === 'folder') {
                    $folder = Folder::find($id);
                    if ($folder) {
                        $folder->folder_state = 'off';
                        $folder->save();
                        $updatedFolderCount++;
                    }
                } else {
                    // 如果类型无效，可以记录日志或跳过当前ID  
                    continue;
                }
            }

            // 返回成功响应，包括实际更新的文件/文件夹数量（如果需要的话）  
            return response()->json([
                'success' => true,
                'message' => "Updated {$updatedFileCount} files and {$updatedFolderCount} folders.",
            ]);
        } catch (\Exception $e) {
            // 捕获异常并返回错误响应  
            return response()->json(['error' => '更新项目状态时出错'], 500);
        }
    }
}
